﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SushiSOAPServices.Dominio;
using System.Data.SqlClient;
using System.Messaging;

namespace SushiSOAPServices.Persistencia
{
    public class PagoDAO
    {
        public Visa Envia(Visa visaAEnviar)
        {
            string rutaCola = @".\private$\visa";
            if (!MessageQueue.Exists(rutaCola))
                MessageQueue.Create(rutaCola);
            MessageQueue cola = new MessageQueue(rutaCola);
            Message mensaje = new Message();
            mensaje.Label = "Nuevo Pago";
            mensaje.Body = visaAEnviar;
            cola.Send(mensaje);

            string rutaCola2 = @".\private$\visarespuesta";
            if (!MessageQueue.Exists(rutaCola2))
                MessageQueue.Create(rutaCola2);
            MessageQueue cola2 = new MessageQueue(rutaCola2);
            cola2.Formatter = new XmlMessageFormatter(new Type[] { typeof(Visa) });
            Message mensaje2 = cola2.Receive();
            Visa visa = (Visa)mensaje2.Body;

            return visa;
        }

        public Pago Crear(Pago pagoACrear)
        {
            Pago pagoCreado = null;
            string sql = "INSERT INTO PAGO VALUES(@idPago,@idpedido,@estado,@tipotarjeta,@nrotarjeta,@monto,@fechapago);";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idPago", pagoACrear.IdPago));
                    com.Parameters.Add(new SqlParameter("@idpedido", pagoACrear.IdPedido));
                    com.Parameters.Add(new SqlParameter("@estado", pagoACrear.Estado));
                    com.Parameters.Add(new SqlParameter("@tipotarjeta", pagoACrear.TipoTarjeta));
                    com.Parameters.Add(new SqlParameter("@nrotarjeta", pagoACrear.NroTarjeta));
                    com.Parameters.Add(new SqlParameter("@monto", pagoACrear.Monto));
                    com.Parameters.Add(new SqlParameter("@fechapago", pagoACrear.FechaPago));
                    com.ExecuteNonQuery();
                }
            }
            pagoCreado = obtenerPagoPorId(pagoACrear.IdPago);
            return pagoCreado;

        }

        public Pago obtenerPagoPorId(int id)
        {
            Pago pagoEncontrado = null;
            string sql = "SELECT * FROM PAGO WHERE IdPago=@idpa";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idpa", id));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            pagoEncontrado = new Pago()
                            {
                                IdPago = (int)resultado["IdPago"],
                                IdPedido = (int)resultado["IdPedido"],
                                Estado = (string)resultado["Estado"],
                                TipoTarjeta = (string)resultado["TipoTarjeta"],
                                NroTarjeta = (string)resultado["NroTarjeta"],
                                FechaPago = (DateTime)resultado["FechaPago"]
                            };
                        }
                    }
                }
            }
            return pagoEncontrado;
        }

        public int obtenerNuevoId()
        {
            int rpta = 0;
            string sql = "SELECT isNull(max(IdPedido),0) as Id FROM Pedido";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            rpta = (int)resultado["Id"];  
                        }
                    }
                }
            }
            return (rpta + 1);
            
        }
    }
}